capability graph builder

安装量: 54
排名: #13779

安装

npx skills add https://github.com/daffy0208/ai-dev-standards --skill 'Capability Graph Builder'
Capability Graph Builder
Build queryable capability graphs from manifests using Codex for relationship inference
Purpose
Consumes capability manifests (generated by manifest-generator) and constructs a queryable graph structure representing all capabilities and their relationships. Uses OpenAI Codex to infer missing relationships and validate compatibility declarations.
When to Use
After generating manifests for skills/MCPs/tools
When building the orchestration system's knowledge base
To discover capability relationships and dependencies
To validate manifest consistency across resources
To enable graph-based queries for orchestration planning
Key Capabilities
Graph Construction
Builds nodes (capabilities) and edges (relationships) from manifests
Relationship Inference
Uses Codex to discover implicit relationships from descriptions
Consistency Validation
Validates bidirectional relationships (if A enables B, does B require A?)
Path Finding
Supports queries like "what skills are needed to achieve X?"
Subgraph Extraction
Finds all capabilities in a domain or with specific effects Inputs inputs : manifest_dir : string

Directory containing manifest.yaml files (e.g., SKILLS/)

output_path : string

Where to write capability-graph.json

validate_consistency : boolean

Run Codex validation on relationships

infer_missing : boolean

Use Codex to infer missing compatibility fields

Process Step 1: Scan and Load Manifests

!/bin/bash

Find all manifest.yaml files

MANIFESTS

$( find SKILLS MCP-SERVERS TOOLS COMPONENTS INTEGRATIONS -name 'manifest.yaml' 2

/dev/null )

Load each manifest

echo "Loading manifests..." for manifest in $MANIFESTS ; do echo " - $manifest " done Step 2: Build Initial Graph // Pseudocode for graph construction const graph = { nodes : [ ] , edges : [ ] , domains : { } , effects : { } } for ( const manifest of manifests ) { // Add node graph . nodes . push ( { id : manifest . name , kind : manifest . kind , description : manifest . description , preconditions : manifest . preconditions , effects : manifest . effects , domains : manifest . domains , cost : manifest . cost , latency : manifest . latency , risk_level : manifest . risk_level } ) // Add edges from compatibility if ( manifest . compatibility ) { if ( manifest . compatibility . requires ) { for ( const required of manifest . compatibility . requires ) { graph . edges . push ( { from : required , to : manifest . name , type : 'requires' } ) } } if ( manifest . compatibility . enables ) { for ( const enabled of manifest . compatibility . enables ) { graph . edges . push ( { from : manifest . name , to : enabled , type : 'enables' } ) } } if ( manifest . compatibility . conflicts_with ) { for ( const conflict of manifest . compatibility . conflicts_with ) { graph . edges . push ( { from : manifest . name , to : conflict , type : 'conflicts_with' } ) } } if ( manifest . compatibility . composes_with ) { for ( const compose of manifest . compatibility . composes_with ) { graph . edges . push ( { from : manifest . name , to : compose , type : 'composes_with' } ) } } } // Index by domain for ( const domain of manifest . domains ) { if ( ! graph . domains [ domain ] ) graph . domains [ domain ] = [ ] graph . domains [ domain ] . push ( manifest . name ) } // Index by effect for ( const effect of manifest . effects ) { if ( ! graph . effects [ effect ] ) graph . effects [ effect ] = [ ] graph . effects [ effect ] . push ( manifest . name ) } } Step 3: Infer Missing Relationships with Codex

For each pair of capabilities, ask Codex about relationships

for capability_a in " ${capabilities [ @ ] } " ; do for capability_b in " ${capabilities [ @ ] } " ; do if [ " $capability_a " != " $capability_b " ] ; then

Get manifests

MANIFEST_A

$( cat "path/to/ $capability_a /manifest.yaml" ) MANIFEST_B = $( cat "path/to/ $capability_b /manifest.yaml" )

Ask Codex

codex
exec
"
Analyze these two capabilities and determine their relationship:
CAPABILITY A:
$MANIFEST_A
CAPABILITY B:
$MANIFEST_B
Questions:
1. Does A require B to function?
2. Does A enable B (make B possible)?
3. Do A and B conflict (can't coexist)?
4. Do A and B compose well together?
5. Are there any implicit dependencies or relationships?
Output JSON:
{
\"
requires
\"
boolean,
\"
enables
\"
boolean,
\"
conflicts_with
\"
boolean,
\"
composes_with
\"
boolean, \" reasoning \" : \" explanation \" } "

/tmp/relationship- ${capability_a} - ${capability_b} .json fi done done Step 4: Validate Consistency

Check bidirectional relationships

codex exec " Analyze this capability graph for consistency issues: GRAPH: $( cat /tmp/capability-graph.json ) Check for: 1. Asymmetric relationships (A enables B but B doesn't require A) 2. Conflicting declarations (A enables B but B conflicts with A) 3. Missing transitive relationships (A requires B, B requires C, but A doesn't require C) 4. Circular dependencies (A requires B, B requires A) Output JSON array of issues: [ { \" type \" : \" asymmetric_enables \" , \" from \" : \" capability-a \" , \" to \" : \" capability-b \" , \" issue \" : \" A enables B but B doesn't list A as required \" , \" severity \" : \" warning \" } ] " Step 5: Write Graph

Write final graph with metadata

cat

META/capability-graph.json << EOF { "version": "1.0.0", "generated_at": " $( date -u +%Y-%m-%dT%H:%M:%SZ ) ", "node_count": ${node_count} , "edge_count": ${edge_count} , "graph": $( cat /tmp/capability-graph.json ) } EOF Graph Query API The generated graph supports these queries: Find Capabilities by Effect // Find all capabilities that create vector indexes const creators = graph . effects [ 'creates_vector_index' ] // => ['rag-implementer', 'pinecone-mcp', 'weaviate-mcp'] Find Capabilities by Domain // Find all RAG-related capabilities const ragCapabilities = graph . domains [ 'rag' ] // => ['rag-implementer', 'embedding-generator-mcp', 'vector-search-tool', ...] Find Dependencies // What does rag-implementer require? const deps = findDependencies ( 'rag-implementer' ) // => ['openai-integration', 'pinecone-mcp'] function findDependencies ( capabilityName ) { return graph . edges . filter ( e => e . to === capabilityName && e . type === 'requires' ) . map ( e => e . from ) } Find Enabled Capabilities // What does having openai-integration enable? const enabled = findEnabled ( 'openai-integration' ) // => ['rag-implementer', 'embedding-generator-mcp', 'gpt-vision-analyzer'] function findEnabled ( capabilityName ) { return graph . edges . filter ( e => e . from === capabilityName && e . type === 'enables' ) . map ( e => e . to ) } Find Conflicts // What conflicts with existing-vector-database? const conflicts = findConflicts ( 'existing-vector-database' ) // => ['rag-implementer'] function findConflicts ( capabilityName ) { return graph . edges . filter ( e => ( e . from === capabilityName || e . to === capabilityName ) && e . type === 'conflicts_with' ) . map ( e => ( e . from === capabilityName ? e . to : e . from ) ) } Find Composition Partners // What composes well with rag-implementer? const partners = findCompositionPartners ( 'rag-implementer' ) // => ['pinecone-mcp', 'weaviate-mcp', 'semantic-search-tool'] function findCompositionPartners ( capabilityName ) { return graph . edges . filter ( e => ( e . from === capabilityName || e . to === capabilityName ) && e . type === 'composes_with' ) . map ( e => ( e . from === capabilityName ? e . to : e . from ) ) } Find Path to Goal // What capabilities are needed to achieve "semantic_search"? const path = findPathToEffect ( 'semantic_search' ) // => ['openai-integration', 'rag-implementer', 'vector-search-tool'] function findPathToEffect ( effect ) { // BFS through requires/enables edges const capabilities = graph . effects [ effect ] || [ ] const visited = new Set ( ) const path = [ ] for ( const cap of capabilities ) { const deps = findAllDependencies ( cap , visited ) path . push ( ... deps , cap ) } return [ ... new Set ( path ) ] } function findAllDependencies ( capabilityName , visited = new Set ( ) ) { if ( visited . has ( capabilityName ) ) return [ ] visited . add ( capabilityName ) const directDeps = graph . edges . filter ( e => e . to === capabilityName && e . type === 'requires' ) . map ( e => e . from ) const allDeps = [ ] for ( const dep of directDeps ) { allDeps . push ( ... findAllDependencies ( dep , visited ) , dep ) } return allDeps } Example Output { "version" : "1.0.0" , "generated_at" : "2025-10-28T12:00:00Z" , "node_count" : 109 , "edge_count" : 287 , "graph" : { "nodes" : [ { "id" : "rag-implementer" , "kind" : "skill" , "description" : "Implement retrieval-augmented generation systems" , "preconditions" : [ { "check" : "file_exists('package.json')" , "required" : true } , { "check" : "env_var_set('OPENAI_API_KEY')" , "required" : true } ] , "effects" : [ "creates_vector_index" , "adds_embedding_pipeline" , "configures_retrieval_api" ] , "domains" : [ "rag" , "ai" , "search" ] , "cost" : "medium" , "latency" : "slow" , "risk_level" : "low" } , { "id" : "pinecone-mcp" , "kind" : "mcp" , "description" : "Vector database operations for Pinecone" , "effects" : [ "creates_vector_index" , "performs_similarity_search" ] , "domains" : [ "rag" , "vector-db" ] , "cost" : "low" , "latency" : "fast" , "risk_level" : "safe" } ] , "edges" : [ { "from" : "openai-integration" , "to" : "rag-implementer" , "type" : "requires" } , { "from" : "rag-implementer" , "to" : "pinecone-mcp" , "type" : "composes_with" } , { "from" : "rag-implementer" , "to" : "semantic-search" , "type" : "enables" } ] , "domains" : { "rag" : [ "rag-implementer" , "pinecone-mcp" , "weaviate-mcp" , "embedding-generator-mcp" ] , "auth" : [ "frontend-builder" , "api-designer" , "security-engineer" ] , "api" : [ "api-designer" , "frontend-builder" , "performance-optimizer" ] } , "effects" : { "creates_vector_index" : [ "rag-implementer" , "pinecone-mcp" , "weaviate-mcp" ] , "adds_auth" : [ "frontend-builder" , "api-designer" ] , "configures_database" : [ "api-designer" , "data-engineer" ] } } } Integration With manifest-generator Consumes manifests generated by manifest-generator skill. With orchestration-planner Provides queryable graph for finding capabilities matching goal requirements. With skill-validator Graph structure helps validate that claimed relationships actually exist. Success Metrics ✅ Graph includes all 109 capabilities ✅ All edges validated for bidirectional consistency ✅ Domain and effect indexes complete ✅ Path finding queries return correct results ✅ Graph can be serialized/deserialized efficiently

返回排行榜